package com.yk.neon.lib.util.base.json;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.alibaba.fastjson.serializer.SerializerFeature;

import java.util.List;
import java.util.Map;

class FastJsonImpl {

	/**
	* 功能描述：把java对象转换成JSON数据
	* @param object java对象
	* @return JSON数据
	*/
	static String beanToJson(Object object) {
		if (object == null) {
			return null;
		}
		return JSON.toJSONString(object);
	}

	/**
	* 功能描述：把java对象转换成JSON数据,保留null
	* @param object java对象
	* @return JSON数据
	*/
	static String beanToJsonIncludeNull(Object object) {
		if (object == null) {
			return null;
		}
		return JSON.toJSONString(object, SerializerFeature.WriteMapNullValue);
	}

	/**
	* 功能描述：把java对象转换成JSON数据,保留null,null转""
	* @param object java对象
	* @return JSON数据
	*/
	static String beanToJsonReplaceNull(Object object) {

		if (object == null) {
			return null;
		}
		return JSON.toJSONString(object, SerializerFeature.WriteMapNullValue).replaceAll("null", "\"\"");
	}

	/**
	 * 功能描述：把JSON数据转换成指定的java对象
	 * @param jsonData JSON数据
	 * @param clazz 指定的java对象
	 * @return 指定的java对象
	 */
	static <T> T jsonToBean(String jsonData, Class<T> clazz) {
		return JSON.parseObject(jsonData, clazz);
	}

	/**
	 * 功能描述：把JSON数据转换成指定的java对象列表
	 * @param jsonData JSON数据
	 * @param clazz 指定的java对象
	 * @return List<T>
	 */
	static <T> List<T> jsonToList(String jsonData, Class<T> clazz) {
		return JSON.parseArray(jsonData, clazz);
	}

	/**
	 * 功能描述：把JSON数据转换成Map<String, T>
	 * @return List<T>
	 */
	@SuppressWarnings("unchecked")
	static Map<String, Object> jsonToMap(String jsonData) {
		return JSON.parseObject(jsonData, Map.class);
	}

	/**
	 * 功能描述：把JSON数据转换成较为复杂的List<Map<String, Object>>
	 * @param jsonData JSON数据
	 * @return List<Map<String, Object>>
	 */
	static List<Map<String, Object>> jsonToListMap(String jsonData) {
		return JSON.parseObject(jsonData, new TypeReference<List<Map<String, Object>>>() {
		});
	}

}